//setTimeout是一个异步函数,也就是说调用后不等他执行就直接往下走
//其第二个参数是一个时间值,时间到了就会执行第一个参数(一个函数)
let 水的状态 = "水没开";

let 烧水 = function () {
    console.log("开始烧水")

    return new Promise(
        (resolve,reject)=>{
            setTimeout(
                ()=>{
                    水的状态="水开了"
                    //console.log(水的状态);
                    resolve()


                }
                ,
                2000
                //
            )
        }
    )
}


let 拿走水壶 = function() {

    console.log(`把水拿走了,发现水是${水的状态}`)
}
烧水().then(拿走水壶)
//拿走水开的水这个方法不能立即执行,而是等烧水等一秒之后再执行
//现在烧水里面有个promise,然后只有promise的状态改变了才会执行then方法
//所以才会执行  拿走烧开的水这个方法

//现在可以把setTImeout理解为,把一壶生水放在灶上烧,放上去点火后就直接走人,不等水开

//总结:  因为拿水壶  依赖于   烧水
//但是因为 js的异步编程特性
//实际上不会等    烧水方法全部执行完
//所以我们用promise   手动的  让烧水方法中  我们想等待的那个代码片段执行后
//再执行   拿走水壶

//另外还有一个用处, 但是这里没有写出来, 就是回调函数的参数  我们获取不到